<?php
/**
 * Created by PhpStorm.
 * UsersF: Mloong
 * Date: 2018/12/18
 * Time: 14:56
 */

namespace Tongdun;

use think\response\Json;

class TongDunApi
{
    /**
     * @var string 风险决策接口
     */
    private $service_api = "https://api.tongdun.cn/riskService/v1.1?";
    /**
     * @var string 命中规则详情查询接口V3.2
     */
    private $rule_api = "https://api.tongdun.cn/risk/rule.detail/v3.2?";
    /**
     * @var array $url_config
     * partner_code 合作方标识
     * secret_key 应用密钥
     * event_id 事件ID
     */
    private $important_config = [
        'partner_code' => 'laiqianbao',
        'secret_key' => '3799f8c8a5c54e32bab868abbc260a8b',
        'partner_key' => '1486095403484879b345c6fa6de4e314'
    ];
    # test
//    private $important_config = [
//        'partner_code' => 'laiqianbao',
//        'secret_key' => 'b9411ff2bdff48f8bfc29f205637b76c',
//        'partner_key' => '5673bd1f31c045138d1b13f93b0de7fb'
//    ];

    /**
     * @var array
     * app_name 合作方应用名
     * resp_detail_type 逗号分隔，填写后可以得额外的信息。
     * recall  重试标识(默认为false，即不是重试。若为true，则代表此次调用为重试。
    )
     */
    private $other_config = [
        'event_id' => 'loan_professional_web',
        'app_name' => 'laiqianbao_web',
        'resp_detail_type' => 'geoip,device,attribution,credit_score,application_id,hit_rules,policy_set_name,policy_set,policy_name',
        'recall' => 'false',
    ];
    # test
//    private $other_config = [
//        'event_id' => 'Loan_web_20170620',
//        'app_name' => 'laiqianbao_web',
//        'resp_detail_type' => 'geoip,device,attribution,credit_score,application_id,hit_rules,policy_set_name,policy_set,policy_name',
//        'recall' => 'false',
//    ];

    /**
     * 对外提供风险决策接口
     * @param $post 客户端传过来的数据，须在controller先进行校验
     * @return Json api返回的json数据
     */
    public function serviceApi($post)
    {
        # unset 数组中不需要的变量
        $config = $this->important_config;
        unset($config['partner_key']);
        # 合并数组
        $arr = array_merge($config,$this->other_config,$post);
        # 调用putArrToString()方法进行俩组装
        $serviceApi = $this->putArrToString($arr,$this->service_api);
        # 发送get请求
        $result = $this->get_api($serviceApi);
        return $result;
    }
    /**
     * 根据 sequence_id 进一步查询更加详情的数据
     * 对外提供命中规则详情查询接口
     * @param $post erviceApi接口得到的部分数据组装成的数组
     * @return Json api返回的json数据
     */
    public function ruleApi($date)
    {
        # unset 数组中不需要的变量
        $config = $this->important_config;
        unset($config['secret_key']);
        # 合并数组
        # 合并数组  把配置参数和serviceApi接口得到的部分数据组装成的数组进行合并成一个新的数组
        $arr = array_merge($config,$date);
        $rule_api = $this->putArrToString($arr,$this->rule_api);
        $result = $this->get_api($rule_api);
        return $result;
    }

    /**
     * 拼接url地址，curl_get发送http请求
     * @param $post 客户端传过来的数据，须在controller先进行校验
     * @return bool|string
     */
    private function putArrToString($arr,$api)
    {
        # 新建一个空变量用于存储拼接的字符串
        $null = '';
        # 循环数组并拼接成一个新的字符串
        foreach ($arr as $key => $value){
            $null .= "$key=$value&";
        }
        # 截取url最后面的 & 符号
        $final_url = substr($api.$null,0,-1);
        # 返回最终的url
        return $final_url;
    }

    /**
     * @param $final_url $final_url 拼接后要去请求api的url
     * @return Json api返回的json数据
     */
    private function get_api($final_url)
    {
        $result = get($final_url);
        return $result;
    }
}